// pages/song/song.js
import request from '../../utils/request';
import moment from 'moment'
import Pubsub from 'pubsub-js'
// 获取全局唯一的实例对象
const appInstandce = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    musicId: '', // 歌曲的id
    music: [], // 歌曲信息
    isPlay: false, // 控制播放时的动画
    durationTime: '00:00', // 总时间
    musicLink: '', // 视频地址
    currentTime: '00:00', // 播放的实时时间
    currentWidth: 0 // 进度条的宽度
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    const musicId = options.songId;
    this.setData({
      musicId
    });
    this.getMusicData(this.data.musicId);
    this.backgroundAudioManager = wx.getBackgroundAudioManager();
    if (appInstandce.globalData.isPlayState && appInstandce.globalData.musicId.toString() === this.data.musicId.toString()) {
      this.setData({
        isPlay: true
      })
    }
    // 监听背景音乐播放事件
    this.backgroundAudioManager.onPlay(() => {
      appInstandce.globalData.musicId = this.data.musicId;
      this.changeMusicState(true);
    })
    // 监听背景音乐的暂停事件
    this.backgroundAudioManager.onPause(() => {
      this.changeMusicState(false);
    })
    // 监听背景音频的停止事件
    this.backgroundAudioManager.onStop(() => {
      this.changeMusicState(false);
    })
    // 监听音频的实时刷新
    this.backgroundAudioManager.onTimeUpdate(() => {
      // 获取当前播放的实时时间,显示到页面中
      // 格式化当前的播放时间
      let currentTime = moment(this.backgroundAudioManager.currentTime * 1000).format('mm:ss')
      let currentWidth = this.backgroundAudioManager.currentTime * 450 / this.backgroundAudioManager.duration
      // 更新数据
      this.setData({
        currentTime, // 实时的播放时间
        currentWidth // 实时的进度
      })

    })
    // 监听背景音频自然播放结束事件
    this.backgroundAudioManager.onEnded(() => {
      // 歌曲结束
      this.setData({
        currentTime: '00:00',
        currentWidth: 0
      })
      // 如果歌曲结束了,那么就应该停止动画效果,如果歌曲结束后,自动的播放下一曲,那么下面的事情就不用做了
      // this.changeMusicState(false)
      this.handlerSwitch({
        currentTarget: {
          id: 'next'
        }
      })
    })
  },
  // 获取歌曲信息
  async getMusicData(ids) {
    const result = await request('/song/detail', {
      ids
    });
    // 获取总时间
    const durationTime = moment(result.songs[0].dt).format('mm:ss');
    this.setData({
      music: result.songs[0],
      durationTime
    })
    // 设置标题
    wx.setNavigationBarTitle({
      title: this.data.music.name,
    })
  },
  // 播放和暂停
  handlerPlay() {
    const isPlay = !this.data.isPlay;
    this.setData({
      isPlay
    });
    const {
      musicId,
      musicLink
    } = this.data;
    this.musicControl(isPlay, musicId, musicLink);
  },
  // 控制音乐的播放和暂停
  async musicControl(isPlay, musicId, musicLink) {
    if (!isPlay) {
      this.backgroundAudioManager.pause();
      return;
    }
    if (!musicLink) {
      const musicUrlData = await request('/song/url', {
        id: musicId
      });
      musicLink = musicUrlData.data[0].url;
      this.setData({
        musicLink
      })
    }
    this.backgroundAudioManager.src = musicLink;
    this.backgroundAudioManager.title = this.data.music.name;
  },
  // 封装的修改全局的属性
  changeMusicState(isPlay) {
    appInstandce.globalData.isPlayState = isPlay
    this.setData({
      isPlay: isPlay
    })
  },
  // 上一曲下一曲
  handlerSwitch(e) {
    Pubsub.subscribe('musicId', (msg, musicId) => {
      this.setData({
        musicId: musicId.toString()
      })
      this.getMusicData(musicId)
      this.musicControl(true, musicId)
      Pubsub.unsubscribe('musicId')
    })
    const type = e.currentTarget.id;
    Pubsub.publish('switchType', type);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})